

package dao;

import entite.EtatEnum;
import entite.Questionnaire;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;


@Stateless
public class QuestionnaireFacade extends AbstractFacade<Questionnaire> implements QuestionnaireFacadeLocal {

    // Unité de persistence
    @PersistenceContext(unitName = "FeedBackFormPU")
    private EntityManager em;

    /**
     * Getter entity Manager
     * @return entity manager
     */
    protected EntityManager getEntityManager() {
        return em;
    }

    /**
     * Constructeur
     */
    public QuestionnaireFacade() {
        super(Questionnaire.class);
    }

    /**
     * Méthode qui permet de récupérer tous les questionnaires ayant un état précis
     * @param etat : état recherché
     * @return Liste des questionnaires ayant l'état recherché
     */
    @Override
    public List<Questionnaire> findAll(EtatEnum etat) {
        Query q = em.createNamedQuery("Questionnaire.findByEtat");
        q.setParameter("etat", etat);
        return q.getResultList();
    }

    /**
     * Méthode pour extraire la liste de tous les questionnaires ayant un état précis en utilisant les indices
     * @param range : tableau d'indice
     * @param etat : état recherché
     * @return Liste des questionnaires ayant l'état recherché
     */
    @Override
    public List<Questionnaire> findRange(int[] range, EtatEnum etat) {
        Query q = em.createNamedQuery("Questionnaire.findByEtat");
        q.setParameter("etat", etat);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    /**
     * Méthode pour extraire la liste de tous les questionnaires ouverts en utilisant les indices
     * @param range : tableau d'indice
     * @param etat : état recherché
     * @return Liste des questionnaires ouverts
     */
    @Override
    public List<Questionnaire> findRangeOuvert(int[] range, EtatEnum etat) {
        Query q = em.createNamedQuery("Questionnaire.findOuvert");
        q.setParameter("aujourdhui", new Date());
        q.setParameter("etat", etat);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    /**
     * Méthode qui permet de récupérer tous les questionnaires ouverts
     * @param etat : état recherché
     * @return Liste des questionnaire ouverts
     */
    @Override
    public List<Questionnaire> findOuvert(EtatEnum etat) {
        Query q = em.createNamedQuery("Questionnaire.findOuvert");
        q.setParameter("aujourdhui", new Date());
        q.setParameter("etat", etat);
        return q.getResultList();
    }

    @Override
    public void remove(Questionnaire entity) {
        entity.getUtilisateurs().clear();
        super.remove(entity);
    }

    @Override
    public List<Questionnaire> questionnaireRelancable(){
        Query q = em.createNamedQuery("Questionnaire.findRelance");
        q.setParameter("etat", EtatEnum.DIFFUSER);
        return q.getResultList();
    }

}
